package thieft;


public class Posicion {
	
	private double latitud;
    private double longitud;

    public Posicion(double latitud, double longitud) {
    	
        this.latitud = latitud;
        this.longitud = longitud;
    }

    private double obtenerLatitud() {
    	
        return latitud;
    }

    private double obtenerLongitud() {
    	
        return longitud;
    }

    private int formulaDelHaversine(double latitud1, double longitud1, double latitud2, double longitud2) {
    	
        int radioTierraEnKm = 6371;
        
        latitud1 = Math.toRadians(latitud1);
        longitud1 = Math.toRadians(longitud1);
        latitud2 = Math.toRadians(latitud2);
        longitud2 = Math.toRadians(longitud2);
        
        double diferenciaLatitud = latitud2 - latitud1;
        double diferenciaLongitud = longitud2 - longitud1;
        double senoLatitud = Math.sin(diferenciaLatitud / 2D);
        double senoLongitud = Math.sin(diferenciaLongitud / 2D);
        
        double a = senoLatitud * senoLatitud + Math.cos(latitud1) * Math.cos(latitud2) * (senoLongitud * senoLongitud);
        double c = 2D * Math.asin(Math.min(1.0D, Math.sqrt(a)));
        
        int distanciaEnKm = (int)((double)radioTierraEnKm * c);
        return distanciaEnKm;
    }

    public int distanciaKm(Posicion otraPosicion) {
    	
        int distanciaEnKm = formulaDelHaversine(latitud, longitud, otraPosicion.obtenerLatitud(), otraPosicion.obtenerLongitud());
        return distanciaEnKm;
    }
}

